Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Звіт
до лабораторної роботи №2
З курсу: “Методи і засоби криптологічних перетворень”
На тему: „АФІННІ шифри”
Львів – 2008
Мета: дослідити афінні шифри першого та вищих порядків..
Теоретичні відомості
1. Шифри простої заміни.
n-символьний алфавіт утотожнюємо з кільцем Zn. А саме, кожна буква замінюється своїм номером у алфавіті, прийому нумерація починається з нуля.
Наприклад, латинська абетка утотожнюється із Z26, а українська із Z33. Літера а української абетки трактується як 0, літера б як 1, в як 2 і т.д. Тепер до букв відкритого тексту ми можемо вільно застосовувати операції додавання та множення за відповідним модулем.
Шифр зсуву.
Ключ: s таке, що 0 < s < п.
Шифрування. У повідомленні кожна буква х заміщується буквою Е(х) = (х + s) mod n.
Дешифрування. У криптотексті кожна буква х' заміщується буквою D(x') = (х' + s') mod п, де s' = п - s. Величину зворотнього зсуву s' будемо називати дешифруючим ключем.
Лінійний шифр.
Ключ: а таке, що 0 < а < п і НСД (а, п) = 1.
Шифрування. У повідомленні кожна буква х заміщується буквою Е{х) = (ах) mod n.
Дешифрування. У криптотексті кожна буква х' заміщується буквою D(x') = (a'x') mod п, де а' — a-1 mod n — дешифруючий ключ.
Узагальненням і шифру зсуву, і лінійного шифру є Афінний шифр.
Ключ: a, s такі, що 0 < s < п, 0 < а <п і НСД (а, п) = 1.
Шифрування. У повідомленні кожна буква х заміщується буквою Е(х) = (ах + s) mod n.
Дешифрування. У криптотексті кожна буква х' заміщується буквою D(x') = (a'x'+ s’) mod n, де пара а’ – a-1 mod n, s’= (—a’s) mod n є дешифруючим ключем.
Як і кожен шифр простої заміни, афінний шифр піддається частотному аналізові.
2. Афінні шифри вищих порядків.
Подумаємо, як можна розширити монограмні шифри попереднього пункту так, щоб вони оперували з k-грамами для довільного k > 1. Спочатку введемо операцію додавання в Znk. Сумою векторів X=(x1,. . .,хk) і s=(s1,… ,sk) з Znk є вектор X + S = ((x1 + s1) mod n,…, (хk + sk) mod n). Zkn з операцією додавання є групою. Вектор —S = (n — s1,…, n — sk) є оберненим до вектора S — (s1,…,sk).
Шифр зсуву k-го порядку.
Ключ: S є Zkn.
Шифрування. Повідомлення розбивається на k-грами. Кожна k-грама X заміщується k-грамою Е(Х) = X + S.
Дешифрування. Кожна k-грама X' криптотексту заміщується k-грамою D(X') = X' + 5’, де S' = —S є дешифруючим ключем.
Лінійний шифр k-го порядку.
Ключ: А Є GLk(Zn).
Шифрування. Повідомлення розбивається на k-грами. Кожна k-грама X заміщується k-грамою Е(Х)= АХ.
Дешифрування. Кожна k-грама Х’ криптотексту заміщується к-грамою D(X') = A'X', де А’ = А-1 — дешифруючий ключ.
Афінний шифр k-го порядку.
Ключ: А Є GLk{Zn} і S Є Znk.
Шифрування. Повідомлення розбивається на k-грами. Кожна k-грама X заміщується k-грамою Е(Х) = АХ + S.
Дешифрування. Кожна k-грама X' криптотексту заміщується k-грамою D{X’} = А’X’ + S’, де А’ = А-1 і S’ = -A’S — дешифруючий ключ.
Шифр зсуву з s=54
Ключ: s=54 mod 26=2.
Шифрування. У повідомленні кожна буква х заміщується буквою Е(х)= (х + s) mod n.
Дешифрування. У криптотексті кожна буква х' заміщується буквою D(x') = (х' + s') mod п, де s' = п – s=26-2=24.
Відкритий текст
Iwanttogotoschool
Зашифровани текст
Kycpvvqiqvquejqqn
Розшифровани текст
Iwanttogotoschool
Блок схема алгоритму
Программа реалізації шифру зсуву
#include<stdio.h>
int main()
{
char c,c2[255];
int i,s=76,s1,k=0;
printf("Enter text: ");
s1=26-s;
while (s1>26) s1-=26;
while (s1<0) s1+=26;
while (c!='\n')
{
scanf("%c",&c);
i=c;
if ((i>=65) && (i<=90)){
i+=s;
while (i>90) i-=26;
}
if ((i>=97) && (i<=122)){
i+=s;
while (i>122) i-=26;
}
c2[k]=i;
k++;
}
printf("S=%d S'=%d\nZawufrovanuj text: ",s,s1);
k=0;
while(c2[k]!='\n')
{
printf("%c",c2[k]);
i=c2[k];
if ((i>=65) && (i<=90)){
i+=s1;
while (i>90) i-=26;
}
if ((i>=97) && (i<=122)){
i+=s1;
while (i>122) i-=26;
}
c2[k]=i;
k++;
}
printf("\nRozwufrovanuj text: ");
...